package com.dys.testoptional12;

import java.util.Optional;

/**
 * @className: com.dys.testoptional12.OptionalTest01
 * @description: Optional的高级方法
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/02 下午10:42
 */
public class OptionalTest03 {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        testToUpperCase();
    }

    /**
     * Optional高级方法
     */
    private static void testOptionalAdvancedMethods() {
        Optional<String> opt1 = Optional.of("张淑娜");
        Optional<Object> opt2 = Optional.empty();
        // opt1.ifPresent(s->System.out.println("有值："+s));
        opt1.ifPresent(System.out::println);
    }

    /**
     * 将Name属性装维大写
     */
    private static void testToUpperCase() {
        Person p = new Person("zangsan", 18);
        Optional<Person> p1 = Optional.of(p);
        String nameForOptional = new OptionalTest03().getNameForOptional(p1);
        System.out.println("name = " + nameForOptional);
    }

    /**
     * 根据Person对象 将name转换为大写并返回,通过Optional方式实现
     */
    private String getNameForOptional(Optional<Person> op) {
        if (op.isPresent()) {
            String name = op
                    // .map(p -> p.getName())
                    .map(Person::getName)
                    // .map(p -> p.toUpperCase())
                    .map(String::toUpperCase)
                    .orElse("空值");
            return name;
        }
        return null;
    }

    /**
     * 根据Person对象 将name属性的值转换为大写并返回
     */
    private String getName(Person person) {
        if (person != null) {
            String name = person.getName();
            if (name != null) {
                return name.toUpperCase();
            } else {
                return null;
            }
        } else {
            return null;
        }
    }
}
